#!/bin/bash
# 全局变量
IP=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v 172.17.0.1|grep -v 10.0.2.15|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
REGISTRY_CONFIG_PATH=/etc/docker/daemon.json
DOCKER_SERVICE=/lib/systemd/system/docker.service
DOCKER_NAME=registry
# 创建数据目录
MODULE_PATH=/opt/module/docker/registry

# 删除数据目录及窗器
rm -rf $MODULE_PATH
# 删除数据目录及窗器
if(( `docker ps -a | grep $DOCKER_NAME | wc -l` >0 ));then
    docker rm -f $DOCKER_NAME
fi
# 默认情况下只支持HTTPS协议下的Registry连接，因此首先我们要让宿主机信任Registry服务器。
sudo cat >$REGISTRY_CONFIG_PATH<<EOF
{
    "registry-mirrors": ["https://jkhtpkq9.mirror.aliyuncs.com"]
    ,"insecure-registries": ["$IP:5000"]
}
EOF
#找到 ExecStart=/usr/bin/dockerd 这一行，添加命令行参数 -H tcp://0.0.0.0:5001
sudo cat >$DOCKER_SERVICE<<EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
BindsTo=containerd.service
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket

[Service]
Type=notify
#开启 tcp 协议，在 linux 上 docker 默认是使用 unix socket 进行通讯的，如果要远程访问是不支持的，对此需要开启 tcp协议 ，以支持外部访问。
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:5001 --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

StartLimitBurst=3

StartLimitInterval=60s

LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

TasksMax=infinity

Delegate=yes

KillMode=process

[Install]
WantedBy=multi-user.target
EOF

# echo 'DOCKER_OPTS="--insecure-registry 192.168.56.101:5000"' > /etc/default/docker
systemctl restart docker

docker run -d \
    --privileged=true \
    -v /etc/localtime:/etc/localtime:ro \
    -e TZ=Asia/Shanghai \
    -p 5000:5000 \
    --name $DOCKER_NAME \
    -v $MODULE_PATH:/var/lib/registry \
    registry:2

# 重新加载配置
systemctl daemon-reload
# 重启docker服务
service docker restart
echo "仓库信息：curl http://localhost:5001/version"
curl http://localhost:5001/version
echo "仓库镜像：curl $IP:5001/v2/_catalog"
curl $IP:5001/v2/_catalog

#=================================================
#            不同其它机器上docker要使用此仓库
#            如:当前仓库192.168.56.101。
#=================================================
# 一、推送镜像到仓库
#（1）docker tag nginx 192.168.56.101:5000/mynginx
#（2）docker push 192.168.56.101:5000/mynginx

#=================================================
# 二、其它机器拉取镜像
#=================================================
#
#（1）配置信任此仓库
# /etc/docker/daemon.json
# {
#     "registry-mirrors": ["https://jkhtpkq9.mirror.aliyuncs.com"]
#     ,"insecure-registries": ["192.168.56.101:5000"]
# }
# （2） 拉取镜像
# docker pull 192.168.56.101:5000/mynginx